Ejercicios Power Law & Scale Free Network

Power Law Distribution

Grafique en Log-Log la distribución de grados de una red de escala libre (una red real o creada).

Calcule el coeficiente de la power law graficada.


In [23]:
import numpy as np
from scipy.stats import powerlaw
import scipy as sp
import seaborn as sns
sns.set()
%matplotlib inline

edges =[]
for line in open('facebook_combined.txt'):
    if line[0] != '#':
        # print(line.replace('\n','').split(' ')) # \n es salto de linea, .split(' ') -> separar por espacio, .split('\t') -> si esta separado por tabulación
        d = line.replace('\n','').split(' ')
        edges.append((d[0],d[1]))
#print(edges)
import networkx as nx
G = nx.Graph()  # G = nx.Graph(edges), otro modo de crear el grafo
G.add_edges_from(edges)
degrees = [degree for _, degree in G.degree().items()]


# print(degrees)



sns.distplot(degrees)


/Users/didergonzalezarroyave/anaconda/lib/python3.6/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j
Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x1181541d0>

In [28]:
e, l, s = sp.stats.powerlaw.fit(degrees)
e, l, s
ax = sns.distplot(sp.stats.powerlaw.rvs(e, l, s, size=100000))


/Users/didergonzalezarroyave/anaconda/lib/python3.6/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [29]:
import matplotlib.pyplot as plt
log = np.log(degrees)
plt.hist(log, log=True)


Out[29]:
(array([ 173.,  192.,  400.,  712.,  869.,  804.,  593.,  289.,    3.,    4.]),
 array([ 0.        ,  0.69517722,  1.39035443,  2.08553165,  2.78070887,
         3.47588608,  4.1710633 ,  4.86624052,  5.56141773,  6.25659495,
         6.95177216]),
 <a list of 10 Patch objects>)

Generative Network Model

Simulación de Red de Citaciones

Defina un número de papers N. Los papers van a ser publicados en orden (primero 1, después 2, etc.) Defina el promedio de citaciones de cada paper (e.g. 3 citaciones). Cree un grupo inicial de papers. Cada nuevo paper tendrá c citaciones. Esas citaciones van a ser a papers ya existentes y proporcional al número de papers que citan a cada paper. Se crearon Hubs? Cuál es la distribución de grados de la red?


In [ ]:
a,b,l,s = sp.stats.fit(r)
(a,b,l,s)

Simulación Red de Proteinas

Cuando un gen se duplica y evoluciona, el nuevo gen mantiene interacción a las mismas proteínas con las que trabaja el gen inicial y a algunas nuevas. El gen original pierde algunas de sus interacciones. Genere una red aleatoria y después cree N genes que sigan este esquema.


In [ ]:

Se repite la historia?

Repetir alguno de los ejercicios anteriores varias veces. Siempre es el mismo nodo el que termina teniendo el mayor número de enlaces?


In [ ]:


In [ ]: